package com.study.example.ex01;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;

import org.junit.Before;
import org.junit.Test;

/**
* @Name: StuScoreSort2File
* @Description: 键盘录入学生信息，按照总分排序，并写入文本文件
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-16 下午1:57:24 
* @Version: V1.0
 */
public class StuScoreSort2File {
	
	/**
	* @Name: scoreSort2File
	* @Description: 键盘录入学生信息，按照总分排序，并写入文本文件
	* 分析：
	* 	1、创建学生对象；
	* 	2、创建集合对象：
	* 		TreeSet<Student>
	* 	3、键盘录入学生信息存储到集合；
	* 	4、遍历集合，把数据写到文本文件；
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-16 下午1:58:15
	* @Parameters: int n 录入学生个数
	* @Return: void
	 */
	public void scoreSort2File(int n) throws IOException {
		//创建集合对象TreeSet<Student>
		TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
			//设置对象比较器
			@Override
			public int compare(Student s1, Student s2) {
				//按总分降序排序
				int num = s2.getSum() - s1.getSum() ;
				//总分相同，按语文成绩降序排序
				int num2 = num == 0 ? s2.getChineseScore() - s1.getChineseScore() : num ;
				//语文成绩也相同，按数学成绩降序排序
				int num3 = num2 == 0 ? s2.getMathScore() - s1.getMathScore() : num2 ;
				//数学成绩也相同，即所有成绩都相同的情况下，按名称降序排序
				int num4 = num3 == 0 ? s2.getName().compareTo(s1.getName()) : num3 ;
				return num4;
			}
		}) ;
		//键盘录入学生信息，并存放到集合中
		for (int i = 1; i <= n; i++) {
			Scanner sc = new Scanner(System.in) ;
			System.out.println("请录入第[" + i + "]个学生的学习信息");
			System.out.print("姓名：");
			String name = sc.nextLine() ;
			System.out.print("语文成绩：");
			int chineseScore = sc.nextInt() ;
			System.out.print("数学成绩：");
			int mathScore = sc.nextInt() ;
			System.out.print("英语成绩：");
			int englishScore = sc.nextInt() ;
			System.out.println("================================");
			//创建学生对象
			Student stu = new Student(name, chineseScore, mathScore, englishScore) ;
			//把学生信息添加到集合中
			ts.add(stu) ;
		}
		//遍历集合，把数据写到文本文件
		BufferedWriter writer = new BufferedWriter(new FileWriter("stu.txt")) ;
		writer.write("学生信息如下：") ;
		writer.newLine() ;
		writer.flush() ;
		writer.write("姓名,语文成绩,数学成绩,英语成绩") ;
		writer.newLine() ;
		writer.flush() ;
		for(Student stu : ts) {
			StringBuffer sb = new StringBuffer() ;
			sb.append(stu.getName()).append(",")
			  .append(stu.getChineseScore()).append(",")
			  .append(stu.getMathScore()).append(",")
			  .append(stu.getEnglishScore()).append(".") ;
			writer.write(sb.toString()) ;
			writer.newLine() ;
			writer.flush() ;
		}
		System.out.println("学生信息存储完毕!");
		//释放资源
		writer.close() ;
	}
	
	@Test
	public void test() {
		try {
			scoreSort2File(5) ;
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
